package creador;

import java.io.File;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import common.ErrorManager;
import common.FileUtil;
import common.PropertiesManager;


public class Creador {

	private JFrame gui = null;

	public Creador() {
		gui = new CreadorGUI(this);
	}

	public void generaIncidencia(String paquete, String id, String nombre) {
		File dirPaquete = new File(paquete);
		if (!dirPaquete.exists())
			salir(ErrorManager.NO_PACKAGE);
		if (!dirPaquete.canRead())
			salir(ErrorManager.PACKAGE_DIR_READ_ERROR);
		if (!dirPaquete.canWrite())
			salir(ErrorManager.PACKAGE_DIR_WRITE_ERROR);
		if (!dirPaquete.isDirectory())
			salir(ErrorManager.PACKAGE_NOT_DIRECTORY);
		if (yaExiste(dirPaquete, id + " - " + nombre))
			salir(ErrorManager.CR_ALREADY_EXISTS);

		File dirPlantilla = new File(PropertiesManager.getProperty("Local", "PathPlantilla"));
		if (!dirPlantilla.exists())
			salir(ErrorManager.TEMPLATE_NOT_ACCESIBLE);
		if (!dirPlantilla.canRead())
			salir(ErrorManager.TEMPLATE_NOT_READABLE);

		// Copiar plantilla al directorio de incidencias
		String newDirPath = dirPaquete.getAbsolutePath() + "\\" + id + " - " + nombre;
		try {
			FileUtil.copyDirectory(dirPlantilla, new File(newDirPath));
		} catch (IOException e) {
			salir(ErrorManager.NEW_DIR_CREATE_ERROR);
		}

		// Cambiar el nombre del proyecto
		File proyectFile = new File(newDirPath + "//Proyecto.prj");
		proyectFile.renameTo(new File(newDirPath + "//" + id + " - " + nombre + ".prj"));

		// Preparar el fichero de descripcion
		try {
			File descFile = new File(newDirPath + "//5. Documentacion//1. Descripcion CD PVCS.txt");
			String texto = FileUtil.readFile(descFile);
			FileUtil.writeFile(descFile, texto.replaceAll("numsiebel", id).replaceAll("TITULO EN MAYUSCULAS", nombre.toUpperCase()));
		} catch (IOException e) {
			salir(ErrorManager.DESC_FILE_EDIT_ERROR);
		}
		
		// TODO: Preparar los fichero office
		//OfficeUtil.replaceSubStringInWord(newDirPath + "//5. Documentacion//2a. SRuiz Guia Instalacion Buyer numsiebel.doc", "numsiebel", id);
		
		// Cambiar los nombres de los ficheros de documentacion
		File instBuyerFile = new File(newDirPath + "//5. Documentacion//2a. SRuiz Guia Instalacion Buyer numsiebel.doc");
		instBuyerFile.renameTo(new File(newDirPath + "//5. Documentacion//2a. SRuiz Guia Instalacion Buyer " + id + ".doc"));
		
		File instUpstreamFile = new File(newDirPath + "//5. Documentacion//2a. SRuiz Guia Instalacion Upstream numsiebel.doc");
		instUpstreamFile.renameTo(new File(newDirPath + "//5. Documentacion//2a. SRuiz Guia Instalacion Upstream " + id + ".doc"));

		File resumenFile = new File(newDirPath + "//5. Documentacion//4. SRuiz numSiebel Titulo.ppt");
		resumenFile.renameTo(new File(newDirPath + "//5. Documentacion//4. SRuiz " + id + " " + nombre + ".ppt"));
		
		salir(ErrorManager.ALL_OK);
	}

	private boolean yaExiste(File dir, String titulo) {
		String[] files = dir.list();
		for (int i = 0, s = files.length; i < s; i++) {
			if (titulo.equals(files[i]))
				return true;
		}
		return false;
	}

	private void salir(int errno) {
		if (errno > 0) {
			JOptionPane.showMessageDialog(gui, ErrorManager.getErrorMessage(errno));
		}
		System.exit(-errno);
	}
}
